১. Multi-threaded Operations (মাল্টি-থ্রেডেড অপারেশন) কী?
Multi-threaded operations হলো একাধিক থ্রেডের মাধ্যমে একযোগভাবে একাধিক কাজ পরিচালনা করা। যখন একটি প্রোগ্রামে একাধিক কাজ (tasks) একসাথে সম্পন্ন করতে হয়, তখন মাল্টি-থ্রেডিং ব্যবহৃত হয়। এতে করে কাজগুলোর একসাথে কার্যকরী হতে সহায়ক হয় এবং প্রোগ্রামের পারফরম্যান্স বাড়ে।
২. PHP তে Multi-threaded Operations
PHP মূলত synchronous (এক্সিকিউশন এক পর পর) প্রোগ্রামিং ভাষা, যা একে একে প্রতিটি কাজ সম্পন্ন করে। তবে, PHP তে মাল্টি-থ্রেডিং সরাসরি সমর্থিত নয়, কারণ PHP থ্রেডিং সাপোর্ট করতো না। তবে কিছু লাইব্রেরি এবং অ্যাপ্লিকেশন ব্যবহার করে PHP তে মাল্টি-থ্রেডিং এর মতো কার্যকলাপ চালানো সম্ভব।
২.১ PHP তে Multi-threading করার জন্য প্রধান পদ্ধতি
- pthreads (প্রথমিক লাইব্রেরি): পুরানো PHP সংস্করণে ব্যবহৃত একটি লাইব্রেরি, যা মাল্টি-থ্রেডিং সাপোর্ট করতো। তবে, PHP 7.2 এবং তার পরবর্তী সংস্করণে এটি আর সমর্থিত নয়। এটি ক্লাস ভিত্তিক, মাল্টি-থ্রেডিং পদ্ধতির মাধ্যমে একাধিক থ্রেড তৈরি করার সুযোগ দেয়।
- Parallel Extension: PHP 7.2 এবং তার পরবর্তী সংস্করণে মাল্টি-থ্রেডিং সমর্থন করার জন্য একটি নতুন লাইব্রেরি "Parallel" আনা হয়েছে। এটি মাল্টি-থ্রেডেড বা মাল্টি-পদক্ষেপ অপারেশন পরিচালনা করতে সক্ষম।
- ReactPHP: ReactPHP একটি asynchronous লাইব্রেরি, যা PHP কে non-blocking I/O এ কাজ করতে সহায়তা করে এবং কার্যকরভাবে asynchronous code execution প্রদান করে।
- Swoole: Swoole একটি PHP-extension যা উচ্চ পারফরম্যান্স এবং মাল্টি-থ্রেডিং সমর্থন করে। এটি PHP কে asynchronous, parallel, এবং multi-threaded পরিবেশে কাজ করতে সক্ষম করে।
৩. Parallel Extension দিয়ে Multi-threading
PHP 7.2 এবং পরবর্তী সংস্করণে মাল্টি-থ্রেডিং পরিচালনার জন্য Parallel Extension ব্যবহৃত হয়। এটি একটি খুবই শক্তিশালী এবং কার্যকরী পদ্ধতি, যা PHP স্ক্রিপ্টের মধ্যে মাল্টি-থ্রেডেড কাজ পরিচালনা করতে সহায়ক।
৩.১ Parallel Extension ইনস্টলেশন
প্রথমে, আপনাকে parallel এক্সটেনশনটি ইনস্টল করতে হবে:
pecl install parallel
এটি ইনস্টল হওয়ার পর, PHP কনফিগারেশন ফাইলে এক্সটেনশনটি সক্রিয় করতে হবে।
echo "extension=parallel.so" >> /etc/php/7.x/cli/php.ini
৩.২ Multi-threaded Task Execution with Parallel
parallel এক্সটেনশন ব্যবহার করে আপনি বিভিন্ন কাজ একযোগে পরিচালনা করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো যেখানে মাল্টি-থ্রেডিং এর মাধ্যমে দুইটি ফাংশন একসাথে চালানো হচ্ছে।
উদাহরণ:
<?php
// প্রথম থ্রেডের কাজ
function task1() {
echo "Task 1: Starting\n";
sleep(2); // কাজের জন্য কিছু সময় নিন
echo "Task 1: Completed\n";
}
// দ্বিতীয় থ্রেডের কাজ
function task2() {
echo "Task 2: Starting\n";
sleep(3); // কাজের জন্য কিছু সময় নিন
echo "Task 2: Completed\n";
}
// প্যারালাল থ্রেডে কাজ চালানো
use parallel\{Runtime, Future};
// নতুন থ্রেড শুরু করা
$runtime = new Runtime();
// Future ফিচার সেট করা, যা থ্রেডের রেজাল্ট ধরে রাখবে
$future1 = $runtime->run('task1');
$future2 = $runtime->run('task2');
// কাজ শেষ হওয়ার পর রেজাল্ট নেওয়া
$future1->value();
$future2->value();
echo "Both tasks completed!\n";
?>
এখানে, task1 এবং task2 দুটি আলাদা থ্রেডে একযোগে চলবে, যার ফলে দুটি কাজ একে অপরকে ব্লক না করে সম্পন্ন হবে।
৩.৩ ফাংশন এবং ডেটা শেয়ারিং
parallel এক্সটেনশনে ডেটা শেয়ারিংয়ের জন্য Future এবং Runtime ব্যবহার করা হয়। এই পদ্ধতিতে, আপনি একাধিক থ্রেডে কাজ করতে পারেন এবং থ্রেডের মধ্যে ডেটা শেয়ার করতে পারবেন।
<?php
use parallel\{Runtime, Future};
// পারালাল কাজের জন্য একটি রানটাইম তৈরি করা
$runtime = new Runtime();
// একটি শেয়ার করা ভ্যারিয়েবল
$sharedData = ["message" => "Hello from thread!"];
// থ্রেডে কাজ পাঠানো
$future = $runtime->run(function() use ($sharedData) {
return $sharedData['message'];
});
// থ্রেডের কাজ থেকে রেজাল্ট পাওয়া
$result = $future->value();
echo "Received from thread: " . $result . "\n";
?>
এই উদাহরণে, একটি শেয়ার করা ডেটা ব্যবহার করে দুইটি থ্রেডের মধ্যে ডেটা শেয়ার করা হয়েছে।
৪. Swoole ব্যবহার করে Multi-threaded Operations
Swoole একটি অত্যন্ত কার্যকরী PHP এক্সটেনশন, যা PHP কে মাল্টি-থ্রেডেড এবং অ্যাসিনক্রোনাস প্রকল্পে রূপান্তরিত করতে সক্ষম। এটি একটি server মডেল ব্যবহার করে, যা বহু সংখ্যক ক্লায়েন্টের সাথে একযোগে যোগাযোগ করতে পারে এবং একই সময় একাধিক কার্যকরী কাজ করতে সহায়তা করে।
৪.১ Swoole ইনস্টলেশন
Swoole ইনস্টল করতে, আপনাকে প্রথমে PHP এর জন্য এটি ইনস্টল করতে হবে:
pecl install swoole
৪.২ Swoole সার্ভার ব্যবহার করা
<?php
// Swoole সার্ভার তৈরি
$server = new swoole_http_server("127.0.0.1", 9501);
// রিকোয়েস্ট হ্যান্ডলার
$server->on("request", function ($request, $response) {
$response->header("Content-Type", "text/html");
$response->end("<h1>Hello, World!</h1>");
});
// সার্ভার চালু করা
$server->start();
?>
এখানে, Swoole HTTP server তৈরি করা হয়েছে, যা একাধিক থ্রেডে ক্লায়েন্ট রিকোয়েস্ট হ্যান্ডেল করতে সক্ষম।
৫. ReactPHP এবং Asynchronous Operations
ReactPHP হল একটি asynchronous লাইব্রেরি, যা PHP তে event loop এর মাধ্যমে non-blocking I/O অপারেশন করতে সাহায্য করে। এটি মাল্টি-থ্রেডিং সরাসরি সমর্থন না করলেও, এটি একাধিক I/O অপারেশনকে খুব দ্রুত এবং দক্ষতার সাথে পরিচালনা করতে সক্ষম।
৫.১ ReactPHP উদাহরণ
<?php
require 'vendor/autoload.php';
use React\EventLoop\Factory;
use React\Socket\Server;
$loop = Factory::create();
$server = new Server('127.0.0.1:8080', $loop);
$server->on('connection', function ($conn) {
$conn->write("Hello, World!\n");
$conn->end();
});
$loop->run();
?>
এটি একটি asynchronous TCP server তৈরি করবে, যা ক্লায়েন্টের সাথে যোগাযোগ করবে এবং তাদেরকে একই সময়ে সেবা প্রদান করবে।
PHP তে মাল্টি-থ্রেডিং সরাসরি সমর্থিত না হলেও, parallel, swoole, এবং reactPHP এর মতো প্যাকেজ ব্যবহার করে আপনি কার্যকরভাবে মাল্টি-থ্রেডেড অপারেশন পরিচালনা করতে পারেন। তবে, মাল্টি-থ্রেডিং ব্যবহারের আগে নিশ্চিত হতে হবে যে আপনার সার্ভার এবং স্ক্রিপ্টের পরিবেশে থ্রেডিং সঠিকভাবে সমর্থিত।
Read more